package ExamSystemClient.managerSystem.ExamManagement;

import ExamSystemClient.model.ChoiceQuestion;
import ExamSystemClient.model.Option;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 从文件中导入考题
 *
 * @author Shuxian Huang
 */
public class ImportQuestions extends QuestionManage {

    public ImportQuestions(List<ChoiceQuestion> questions) {
        super(questions);
    }

    @Override
    public void operate() {
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(new FileInputStream("QuestionsBank.txt"));
            questions.addAll ((List<ChoiceQuestion>)ois.readObject());
            System.out.println("导入考题成功！");
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            if (null != ois){
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public QuestionManage show() {
        System.out.println("导入考题！");
        return this;
    }

    public static void main(String[] args) {
        List<ChoiceQuestion> choiceQuestions = new ArrayList<>();
        new ImportQuestions(choiceQuestions).operate();
        for (ChoiceQuestion choiceQuestion : choiceQuestions) {
            System.out.println(choiceQuestion);
        }
//        List<ChoiceQuestion> newQs = new ArrayList<>();
//        newQs.add(new ChoiceQuestion(
//                0001,
//                "以下对继承的描述锚误的是",
//                new Option(Option.OptionCode.parse("A"), "Java中的继承允许一个子类继承多个父类"),
//                new Option(Option.OptionCode.parse("B"), "父类更具有通用性，子类更具体"),
//                new Option(Option.OptionCode.parse("C"), "Java中的继承存在着传递性"),
//                new Option(Option.OptionCode.parse("D"), "当实例化子类时会递归调用父类中的构造方法"),
//                Option.OptionCode.parse("A")));
//        newQs.add(new ChoiceQuestion(
//                0002,
//                "已知表达式int m[] = {0,1,2,3,4,5,6}; 下面那个表达式的值与数组的长度相等",
//                new Option(Option.OptionCode.parse("A"), "m.length()"),
//                new Option(Option.OptionCode.parse("B"), "m.length"),
//                new Option(Option.OptionCode.parse("C"), "m.length()+1"),
//                new Option(Option.OptionCode.parse("D"), "m.length+1"),
//                Option.OptionCode.parse("B")));
//        newQs.add(new ChoiceQuestion(
//                0003,
//                "在java中，无论测试条件是什么，下列（）循环将至少执行一次",
//                new Option(Option.OptionCode.parse("A"), "for"),
//                new Option(Option.OptionCode.parse("B"), "do...while"),
//                new Option(Option.OptionCode.parse("C"), "while"),
//                new Option(Option.OptionCode.parse("D"), "while...do"),
//                Option.OptionCode.parse("B")));
//        newQs.add(new ChoiceQuestion(
//                0004,
//                "以下HTTP相应状态码的含义描述正确的是",
//                new Option(Option.OptionCode.parse("A"), " 200ok表示请求成功"),
//                new Option(Option.OptionCode.parse("B"), "400不良请求表示服务器未发现与请求URL匹配内容"),
//                new Option(Option.OptionCode.parse("C"), "404未发现表示由于语法错误儿导致服务器无法理解请求信息"),
//                new Option(Option.OptionCode.parse("D"), "500内部服务器错误，无法处理请求"),
//                Option.OptionCode.parse("D")));
//        newQs.add(new ChoiceQuestion(
//                0005,
//                "下面关于 Java.lang.Exception类的说法正确的是",
//                new Option(Option.OptionCode.parse("A"), "继承自 Throwable"),
//                new Option(Option.OptionCode.parse("B"), "不支持Serializable"),
//                new Option(Option.OptionCode.parse("C"), "继承自 AbstractSet"),
//                new Option(Option.OptionCode.parse("D"), "继承自FitelnputStream"),
//                Option.OptionCode.parse("A")));
////        newQs.add(new ChoiceQuestion(
////                9,
////                "下列说法正确的是",
////                new Option(Option.OptionCode.parse("A"), "class中的constructor不可省略"),
////                new Option(Option.OptionCode.parse("B"), "constructor必须与class同名，但方法不能与class同名"),
////                new Option(Option.OptionCode.parse("C"), "constructor在一个对象被new时执行"),
////                new Option(Option.OptionCode.parse("D"), "一个class只能定义一个constructor"),
////                Option.OptionCode.parse("C")));
////        newQs.add(new ChoiceQuestion(
////                10,
////                "下列说法正确的是",
////                new Option(Option.OptionCode.parse("A"), "实例方法可以直接调用超类的实例方法"),
////                new Option(Option.OptionCode.parse("B"), "实例方法可以直接调用超类的类方法"),
////                new Option(Option.OptionCode.parse("C"), "实例方法可以直接调用其他类的实例方法"),
////                new Option(Option.OptionCode.parse("D"), "实例方法可调用本类的类方法"),
////                Option.OptionCode.parse("D")));
//        ObjectOutputStream oos = null;
//        try {
//            oos= new ObjectOutputStream(new FileOutputStream("QuestionsBank.txt"));
//            oos.writeObject(newQs);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }finally{
//            if (oos != null){
//                try {
//                    oos.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
    }
}
